Conversation
Added keybind registries
… custom-registry # Conflicts: # common/build.gradle # fabric/src/main/java/software/bluelib/BlueLib.java # neoforge/build.gradle # neoforge/src/main/java/software/bluelib/BlueLib.java # neoforge/src/main/java/software/bluelib/client/BlueLibClient.java
… custom-registry # Conflicts: # common/src/main/java/software/bluelib/BlueLibCommon.java # common/src/main/java/software/bluelib/internal/registry/TestEntityReg.java # common/src/main/java/software/bluelib/platform/IRegistryHelper.java # common/src/main/resources/META-INF/accesstransformer-nf.cfg # fabric/src/main/java/software/bluelib/BlueLib.java # fabric/src/main/java/software/bluelib/platform/FabricRegistryHelper.java # fabric/src/main/resources/bluelib.accesswidener # fabric/src/main/resources/fabric.mod.json # neoforge/src/main/java/software/bluelib/BlueLib.java # neoforge/src/main/java/software/bluelib/platform/NeoForgeRegistryHelper.java
Fixed blockstate gen returning null Fixed recipe gen only generating one item recipe
…istry # Conflicts: # common/src/main/java/software/bluelib/internal/registry/TestEntityReg.java
… custom-registry # Conflicts: # common/src/main/java/software/bluelib/BlueLibCommon.java # common/src/main/java/software/bluelib/BlueLibConstants.java # common/src/main/java/software/bluelib/api/entity/variant/IVariantEntity.java # common/src/main/java/software/bluelib/api/event/mod/ModIntegration.java # common/src/main/java/software/bluelib/api/json/JSONMerger.java # common/src/main/java/software/bluelib/api/json/JSONParser.java # common/src/main/java/software/bluelib/api/net/NetworkPacket.java # common/src/main/java/software/bluelib/api/utils/IsValidUtils.java # common/src/main/java/software/bluelib/api/utils/conversion/CaseConverterUtils.java # common/src/main/java/software/bluelib/api/utils/conversion/ColorConverterUtils.java # common/src/main/java/software/bluelib/api/utils/conversion/MathConverterUtils.java # common/src/main/java/software/bluelib/api/utils/math/AlgebraicUtils.java # common/src/main/java/software/bluelib/api/utils/math/GeometricUtils.java # common/src/main/java/software/bluelib/api/utils/math/MatrixUtils.java # common/src/main/java/software/bluelib/api/utils/math/RandomGenUtils.java # common/src/main/java/software/bluelib/api/utils/math/StatisticalUtils.java # common/src/main/java/software/bluelib/api/utils/minecraft/ChunkUtils.java # common/src/main/java/software/bluelib/api/utils/variant/ParameterUtils.java # common/src/main/java/software/bluelib/client/gui/logging/LoggerScreen.java # common/src/main/java/software/bluelib/commands/OpenLoggerScreenCommand.java # common/src/main/java/software/bluelib/compat/jei/BlueJeiPlugin.java # common/src/main/java/software/bluelib/entity/variant/VariantLoader.java # common/src/main/java/software/bluelib/event/ReloadHandler.java # common/src/main/java/software/bluelib/markdown/MarkdownFeature.java # common/src/main/java/software/bluelib/markdown/MarkdownParser.java # common/src/main/java/software/bluelib/markdown/syntax/Color.java # common/src/main/java/software/bluelib/markdown/syntax/CopyToClipboard.java # common/src/main/java/software/bluelib/markdown/syntax/Hyperlink.java # common/src/main/java/software/bluelib/mixin/common/brewing/BrewingStandBlockEntityMixin.java # common/src/main/java/software/bluelib/net/messages/client/OpenLoggerPacket.java # common/src/main/java/software/bluelib/net/messages/client/variant/AllDataPacket.java # common/src/main/java/software/bluelib/net/messages/client/variant/ParameterDataPacket.java # common/src/main/java/software/bluelib/net/messages/client/variant/VariantsPacket.java # common/src/main/java/software/bluelib/net/messages/server/TestPacket.java # common/src/main/java/software/bluelib/net/serverHandling/TestPacketHandler.java # common/src/main/java/software/bluelib/platform/IPlatformHelper.java # common/src/main/java/software/bluelib/platform/IRegistryHelper.java # fabric/src/main/java/software/bluelib/BlueLib.java # fabric/src/main/java/software/bluelib/config/BlueLibConfig.java # fabric/src/main/java/software/bluelib/platform/FabricPlatformHelper.java # fabric/src/main/java/software/bluelib/platform/FabricRegistryHelper.java # gradle/libs.versions.toml # neoforge/src/main/java/software/bluelib/BlueLib.java # neoforge/src/main/java/software/bluelib/client/BlueLibClient.java # neoforge/src/main/java/software/bluelib/config/BlueLibConfig.java # neoforge/src/main/java/software/bluelib/event/ReloadHandler.java # neoforge/src/main/java/software/bluelib/platform/NeoForgePlatformHelper.java # neoforge/src/main/java/software/bluelib/platform/NeoForgeRegistryHelper.java
There was a problem hiding this comment.
Pull Request Overview
This PR introduces a comprehensive custom registry system for the BlueLib mod framework, providing unified registration across platforms (Fabric and NeoForge) with automatic data generation capabilities.
- Implements builder pattern for registering items, blocks, entities, and other game objects
- Adds automatic generation of data files (recipes, models, blockstates) during development
- Unifies registration logic across Fabric and NeoForge platforms
Reviewed Changes
Copilot reviewed 43 out of 43 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| NeoForgeRegistryHelper.java | Implements NeoForge-specific registration methods for items, blocks, entities, etc. |
| FabricRegistryHelper.java | Implements Fabric-specific registration methods using built-in registries |
| AbstractRegistryBuilder.java | Core registry builder providing platform-agnostic registration API |
| Various builder classes | Builder pattern implementations for different game object types |
| Data generation classes | Automatic generation of JSON files for recipes, models, and blockstates |
| package software.bluelib.platform; | ||
|
|
||
| import java.util.function.Supplier; | ||
| import java.util.function.Supplier; |
There was a problem hiding this comment.
There is a duplicate import of java.util.function.Supplier on lines 10 and 11. Remove the duplicate import.
| import java.util.function.Supplier; |
| package software.bluelib.platform; | ||
|
|
||
| import java.util.function.Supplier; | ||
| import java.util.function.Supplier; |
There was a problem hiding this comment.
There is a duplicate import of java.util.function.Supplier on lines 10 and 11. Remove the duplicate import.
| import java.util.function.Supplier; |
| import net.minecraft.world.level.block.Block; | ||
| import net.minecraft.world.level.block.entity.BlockEntity; | ||
| import net.minecraft.world.level.block.entity.BlockEntityType; | ||
| import net.minecraft.core.Holder; |
There was a problem hiding this comment.
There are duplicate imports for several Minecraft classes (Holder, Registry, BuiltInRegistries) between lines 15-18 and 28-31. Remove the duplicate imports.
| try { | ||
| Field resultField = recipe.getClass().getDeclaredField("result"); | ||
| resultField.setAccessible(true); | ||
| Object value = resultField.get(recipe); | ||
| if (value instanceof ItemStack stack) { | ||
| return stack; | ||
| } | ||
| } catch (Exception ignored) {} |
There was a problem hiding this comment.
This method uses reflection to access private fields, which is fragile and could break with code changes. Consider using a more stable approach or adding proper error handling for when the field doesn't exist.
| try { | |
| Field resultField = recipe.getClass().getDeclaredField("result"); | |
| resultField.setAccessible(true); | |
| Object value = resultField.get(recipe); | |
| if (value instanceof ItemStack stack) { | |
| return stack; | |
| } | |
| } catch (Exception ignored) {} | |
| // Try to access the "result" field, with proper error handling and alternative field names | |
| String[] possibleFieldNames = {"result", "f_43781_"}; // Add obfuscated or alternative names if needed | |
| for (String fieldName : possibleFieldNames) { | |
| try { | |
| Field resultField = recipe.getClass().getDeclaredField(fieldName); | |
| resultField.setAccessible(true); | |
| Object value = resultField.get(recipe); | |
| if (value instanceof ItemStack stack) { | |
| return stack; | |
| } | |
| } catch (NoSuchFieldException e) { | |
| // Field not found, try next | |
| } catch (IllegalAccessException e) { | |
| System.err.println("Failed to access field '" + fieldName + "' in " + recipe.getClass().getName() + ": " + e.getMessage()); | |
| } catch (Exception e) { | |
| System.err.println("Unexpected error accessing field '" + fieldName + "' in " + recipe.getClass().getName() + ": " + e.getMessage()); | |
| } | |
| } | |
| System.err.println("Could not retrieve 'result' field from recipe class: " + recipe.getClass().getName()); |
No description provided.